// 导出一个axios的实例  而且这个实例要有请求拦截器 响应拦截器
import axios from 'axios'
import store from '@/store'
import router from '@/router'
const service = axios.create({
  // baseURL: '/api'
  // 基地址也可以用环境变量来设置，用yarn dev 会自动转换成开发模式
  // 项目上线 yarn build 就会自动转换成生产模式
  baseURL: process.env.VUE_APP_BASE_API
}) // 创建一个axios的实例
// service.interceptors.request.use() // 请求拦截器
// 添加请求拦截器
service.interceptors.request.use(function(config) {
  // 在发送请求之前做些什么
  const token = store.state.user.token
  // console.log(store.state)
  if (token) {
    config.headers.Authorization = 'Bearer ' + token
  }
  return config
}, function(error) {
  // 对请求错误做些什么
  return Promise.reject(error)
})

// service.interceptors.response.use() // 响应拦截器
// 添加响应拦截器
service.interceptors.response.use(function(response) {
  // 对响应数据做点什么
  // console.log(response)
  // 业务错误 不报错，需要手动抛出错误
  if (!response.data.success) {
    // Promise.reject 可以手动抛出错误 里面传入错误信息
    return Promise.reject(response.data.message)
  }
  return response.data
}, function(error) {
  // 对响应错误做点什么
  // console.log(error.response)
  if (error.response.status === 401 && error.response.data.code === 10002) {
    store.commit('user/deltoken')
    store.commit('user/delUserInfo')
    // router.push('/login')
    // console.log(router)
    // encodeURIComponent 防止路径丢失 给路径编码
    // 处理vuex中token错误的问题，此时vuex中的token是错的 从store中获取
    // 打印router就会发现 在currentRoute中有当前页面的路径信息 ，让他跳转页面时携带当前页面的路径
    // 再次登录就会回到原来的页面
    router.push(`/login?url=${encodeURIComponent(router.currentRoute.fullPath)}`)
  }
  return Promise.reject(error)
})

export default service // 导出axios实例
